#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
#include <string.h>

#define SIZE 1024

// 信号量
sem_t sem;

//资源
char text[SIZE]; 

void* print_size(void* avg);

int main(int argc, char* argv[])
{
    //  信号量初始化,给sem信号量对象初始化为第三个参数 0
    //参数 信号量的使用类型 是否进程间通信 3 信号量的初始化
    sem_init(&sem, 0, 0);
    pthread_t tid;
    pthread_create(&tid, NULL, print_size, NULL);
    printf("子线程启动！\n");

    //主线程读取用户的输入，输入到text中
    printf("请输入文本，输入 bye 则结束\n");
    while(strncmp("buy", text, 3))
    {
        //从标准输入 读取字符串写到text中
        fgets(text, SIZE, stdin);
        //信号量的变化,通知sem唤醒 sem_wait所阻塞的线程
        sem_post(&sem);
    }
    pthread_join(tid, NULL);
    // 销毁信号量
    sem_destroy(&sem);
    return 0;
}

void* print_size(void* avg)
{
    // 信号量若为0，阻塞
    //非零 信号量-1
    sem_wait(&sem);
    while(strncmp("bye", text, 3))
    {
        printf("文本长度：%ld\n", strlen(text));
        // 信号检测 看是否进去下一次判断，也就是读取数据，因为只有有信号时才可以打印文本长度
        sem_wait(&sem);
    }
    pthread_exit(NULL);
}
